﻿using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.ComponentModel;
using MVCScaffold.Suporte;
using EnvDTE80;
using MVCScaffold.Extensions;

namespace MVCScaffold.GeradoresDeCodigo
{
    public class GeradorCSharp : GeradorBase
    {
        public GeradorCSharp(GerenciadorEdmx gerenciadorEdmx, GerenciadorArquivoProjeto gerenciadorArquivoProjeto, string caminhoTemplate)
        {
            this._gerenciadorEdmx = gerenciadorEdmx;
            this._gerenciadorArquivoProjeto = gerenciadorArquivoProjeto;
            this._caminhoTemplate = caminhoTemplate;
            this._listaCaminhoArquivoGerado = new List<string>();
        }

        public GeradorCSharp(GerenciadorEdmx gerenciadorEdmx, GerenciadorArquivoProjeto gerenciadorArquivoProjeto)
            : this(gerenciadorEdmx, gerenciadorArquivoProjeto, Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
                @"Visual Studio 2008\Templates\aspnetscaffold"))
        { }

        public GeradorCSharp(GerenciadorEdmx gerenciadorEdmx, GerenciadorArquivoProjeto gerenciadorArquivoProjeto, DTE2 applicationObject)
            : this(gerenciadorEdmx, gerenciadorArquivoProjeto, Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
                @"Visual Studio 2008\Templates\aspnetscaffold"))
        {
            this._applicationObject = applicationObject;
        }

        private readonly GerenciadorEdmx _gerenciadorEdmx;
        private readonly GerenciadorArquivoProjeto _gerenciadorArquivoProjeto;
        private readonly DTE2 _applicationObject;
        private readonly string _caminhoTemplate;
        private readonly List<string> _listaCaminhoArquivoGerado;
        private readonly Microsoft.VisualStudio.TextTemplating.Engine _engine = new Microsoft.VisualStudio.TextTemplating.Engine();

        public int QuantidadeControllers { get; private set; }
        public int QuantidadeViews { get; private set; }

        public Templates TipoTemplates { get; set; }

        private string ObterTipo(Type tipo)
        {
            if (tipo.Name.Equals("Int32", StringComparison.CurrentCultureIgnoreCase))
                return "int";
            else if (tipo.Name.Equals("String", StringComparison.CurrentCultureIgnoreCase))
                return "string";

            return tipo.Name;
        }

        private void RecriarTemplates()
        {
            Directory.CreateDirectory(Path.Combine(_caminhoTemplate, "CSharp"));
            Directory.CreateDirectory(Path.Combine(_caminhoTemplate, "VB"));
            CriarArquivo(MVCScaffold.Properties.Resources.ControllerCSharp, Path.Combine(_caminhoTemplate, EnumSuporte.ObterString(Templates.ControllerCSharp)));
            CriarArquivo(MVCScaffold.Properties.Resources.Index_aspx, Path.Combine(_caminhoTemplate, EnumSuporte.ObterString(Templates.ViewIndex)));
            CriarArquivo(MVCScaffold.Properties.Resources.Details_aspx, Path.Combine(_caminhoTemplate, EnumSuporte.ObterString(Templates.ViewDetails)));
            CriarArquivo(MVCScaffold.Properties.Resources.Create_aspx, Path.Combine(_caminhoTemplate, EnumSuporte.ObterString(Templates.ViewCreateCSharp)));
            CriarArquivo(MVCScaffold.Properties.Resources.Edit_aspx, Path.Combine(_caminhoTemplate, EnumSuporte.ObterString(Templates.ViewEdit)));
            CriarArquivo(MVCScaffold.Properties.Resources.Delete_aspx, Path.Combine(_caminhoTemplate, EnumSuporte.ObterString(Templates.ViewDelete)));
        }

        private void CriarArquivo(byte[] conteudo, string caminho)
        {
            using (FileStream fileStream = File.Create(caminho))
            {
                fileStream.Write(conteudo, 0, conteudo.Length);
                fileStream.Flush();
            }
        }

        private void CriarArquivo(string conteudo, string caminho)
        {
            using (FileStream fileStream = File.Create(caminho))
            {
                fileStream.Write(Encoding.Default.GetBytes(conteudo), 0, conteudo.Length);
                fileStream.Flush();
            }
            this._listaCaminhoArquivoGerado.Add(caminho);
        }

        private byte[] ObterArquivoDoResources(Templates template)
        {
            if (template == Templates.ControllerCSharp)
                return MVCScaffold.Properties.Resources.ControllerCSharp;
            else if (template == Templates.ViewCreateCSharp)
                return MVCScaffold.Properties.Resources.Create_aspx;
            else if (template == Templates.ViewDelete)
                return MVCScaffold.Properties.Resources.Delete_aspx;
            else if (template == Templates.ViewDetails)
                return MVCScaffold.Properties.Resources.Details_aspx;
            else if (template == Templates.ViewEdit)
                return MVCScaffold.Properties.Resources.Edit_aspx;
            else if (template == Templates.ViewIndex)
                return MVCScaffold.Properties.Resources.Index_aspx;
            else
                throw new System.Resources.MissingManifestResourceException();
        }

        public override void GerarViewEdit()
        {
            string resultado = String.Empty;
            string templateViewCreate = this.CarregarTemplate(Templates.ViewEdit);
            StringBuilder paramLink = new StringBuilder();


            foreach (var item in _gerenciadorEdmx.Entidades.Where(x => x.IsSelected))
            {
                var caminhoViewEdit = Path.Combine(_gerenciadorArquivoProjeto.DiretorioProjeto, String.Format(@"Views\{0}", item.Name));
                if (!Directory.Exists(caminhoViewEdit))
                    Directory.CreateDirectory(caminhoViewEdit);

                foreach (var propriedade in item.Properties.OrderByDescending(x => x.IsKey))
                {
                    if (propriedade.IsKey)
                    {
                        if (item.Properties.Where(x => x.IsKey).Count() > 1)
                            paramLink.AppendFormat(" {0}=Model.{1}, ", propriedade.Name.ToLowerPrimeiraLetra(), propriedade.Name);
                        else
                            paramLink.AppendFormat(" id=Model.{0}  ", propriedade.Name);
                    }
                }

                paramLink = paramLink.Remove(paramLink.Length - 2, 2);
                resultado = templateViewCreate
               .Replace("<%NamespaceEDMX%>", _gerenciadorEdmx.Namespace)
               .Replace("<%EntityName%>", item.Name)
               .Replace("<%paramLink%>", paramLink.ToString());

                paramLink.Length = 0;
                this.CriarArquivo(resultado.ToString(), String.Format(@"{0}\Edit.aspx", caminhoViewEdit, item.Name));
                this.QuantidadeViews++;
            }
        }

        //private void GerarViewCreate()
        //{
        //    string resultado = String.Empty;
        //    string templateViewCreate = this.CarregarTemplate(Templates.ViewCreate);
        //    StringBuilder stringDIV = new StringBuilder();
        //    StringBuilder paramLink = new StringBuilder();

        //    foreach (var item in _gerenciadorEdmx.Entidades.Where(x => x.Selecionada))
        //    {
        //        this.OnStatus(new StatusEventArgs(TipoStatus.Views) { Mensagem = String.Format(Suporte.Mensagens.GetInstance().ResourceManager.GetString("StatusGerandoView"), "Create", item.Nome) });

        //        var caminhoViewIndex = Path.Combine(_gerenciadorArquivoProjeto.DiretorioProjeto, String.Format(@"Views\{0}", item.Nome));
        //        if (!Directory.Exists(caminhoViewIndex))
        //            Directory.CreateDirectory(caminhoViewIndex);

        //        foreach (var propriedade in item.Propriedades.OrderByDescending(x => x.EhChave))
        //        {
        //            stringDIV.AppendFormat("<div class=\"editor-label\"><%= Html.LabelFor(model => model.{0}) %></div>\r\n\t\t\t<div class=\"editor-field\">\r\n\t\t\t\t<%= Html.TextBoxFor(model => model.{0}) %>\r\n\t\t\t\t<%= Html.ValidationMessageFor(model => model.{0}) %>\r\n\t\t\t</div>"
        //                , propriedade.Nome);

        //            if (propriedade.EhChave)
        //            {
        //                if (item.Propriedades.Where(x => x.EhChave).Count() > 1)
        //                    paramLink.AppendFormat(" {0}=Model.{1}, ", propriedade.Nome.ToLowerPrimeiraLetra(), propriedade.Nome);
        //                else
        //                    paramLink.AppendFormat(" id=Model.{0}  ", propriedade.Nome);
        //            }
        //        }

        //        paramLink = paramLink.Remove(paramLink.Length - 2, 2);
        //        resultado = templateViewCreate
        //       .Replace("<%NamespaceEDMX%>", _gerenciadorEdmx.Namespace)
        //       .Replace("<%EntityName%>", item.Nome)
        //       .Replace("<%DivProperties%>", stringDIV.ToString())
        //       .Replace("<%paramLink%>", paramLink.ToString());

        //        stringDIV.Length = 0;
        //        paramLink.Length = 0;
        //        this.CriarArquivo(resultado.ToString(), String.Format(@"{0}\Create.aspx", caminhoViewIndex, item.Nome));
        //        this.QuantidadeViews++;
        //    }
        //}


        public override void GerarViewCreate()
        {
            string resultado;
            string templateViewCreate = CarregarTemplate(Templates.ViewCreateCSharp);
            var stringDiv = new StringBuilder();
            var paramLink = new StringBuilder();

            foreach (var item in _gerenciadorEdmx.Entidades.Where(x => x.IsSelected))
            {
                OnStatus(new StatusEventArgs(TipoStatus.Views) { Mensagem = String.Format(Mensagens.GetInstance().ResourceManager.GetString("StatusGerandoView"), "Create", item.Name) });

                var caminhoViewIndex = Path.Combine(_gerenciadorArquivoProjeto.DiretorioProjeto, String.Format(@"Views\{0}", item.Name));
                if (!Directory.Exists(caminhoViewIndex))
                    Directory.CreateDirectory(caminhoViewIndex);

                var host = new MvcScaffoldTextTemplateHost(Path.Combine(_caminhoTemplate, EnumSuporte.ObterString(Templates.ControllerCSharp)))
                {
                    Namespace = _gerenciadorArquivoProjeto.Namespace,
                    EdmxNamespace = _gerenciadorEdmx.Namespace,
                    ContextName = _gerenciadorEdmx.NomeContext,
                    VarContext = "context",
                    EntityName = item.Name,
                    Propriedades = item.Properties
                };

                //foreach (var propriedade in item.Propriedades)
                //{
                //    host.Propriedades.Add(propriedade.Nome);
                //    //stringDiv.AppendFormat("<div class=\"editor-label\"><%= Html.LabelFor(model => model.{0}) %></div>\r\n\t\t\t<div class=\"editor-field\">\r\n\t\t\t\t<%= Html.TextBoxFor(model => model.{0}) %>\r\n\t\t\t\t<%= Html.ValidationMessageFor(model => model.{0}) %>\r\n\t\t\t</div>"
                //    //    , propriedade.Nome);

                //    //if (propriedade.EhChave)
                //    //{
                //    //    if (item.Propriedades.Where(x => x.EhChave).Count() > 1)
                //    //        paramLink.AppendFormat(" {0}=Model.{1}, ", propriedade.Nome.ToLowerPrimeiraLetra(), propriedade.Nome);
                //    //    else
                //    //        paramLink.AppendFormat(" id=Model.{0}  ", propriedade.Nome);
                //    //}
                //}

                //paramLink = paramLink.Remove(paramLink.Length - 2, 2);
                // resultado = templateViewCreate
                //.Replace("<%NamespaceEDMX%>", _gerenciadorEdmx.Namespace)
                //.Replace("<%EntityName%>", item.Nome)
                //.Replace("<%DivProperties%>", stringDIV.ToString())
                //.Replace("<%paramLink%>", paramLink.ToString());

                // stringDIV.Length = 0;
                // paramLink.Length = 0;
                // this.CriarArquivo(resultado.ToString(), String.Format(@"{0}\Create.aspx", caminhoViewIndex, item.Nome));
                // this.QuantidadeViews++;

                
               

                resultado = _engine.ProcessTemplate(templateViewCreate, host);
                if (host.Errors.Count == 0)
                {
                    CriarArquivo(resultado.Trim(), String.Format(@"{0}\Create.aspx", caminhoViewIndex));
                    QuantidadeViews++;
                }
                else
                {
                    throw new MvcScaffoldTextTemplateHostException(String.Format("Erro ao criar view create para entidade {0}", item.Name), host.Errors);
                }
            }
        }

        public override void GerarViewDetails()
        {
            string resultado = String.Empty;
            string templateViewDetails = this.CarregarTemplate(Templates.ViewDetails);
            StringBuilder paramLink = new StringBuilder();

            foreach (var item in _gerenciadorEdmx.Entidades.Where(x => x.IsSelected))
            {
                this.OnStatus(new StatusEventArgs(TipoStatus.Views) { Mensagem = String.Format(Suporte.Mensagens.GetInstance().ResourceManager.GetString("StatusGerandoView"), "Details", item.Name) });
                var caminhoViewDetails = Path.Combine(_gerenciadorArquivoProjeto.DiretorioProjeto, String.Format(@"Views\{0}", item.Name));
                if (!Directory.Exists(caminhoViewDetails))
                    Directory.CreateDirectory(caminhoViewDetails);

                foreach (var propriedade in item.Properties.OrderByDescending(x => x.IsKey))
                {
                    if (propriedade.IsKey)
                    {
                        if (item.Properties.Where(x => x.IsKey).Count() > 1)
                            paramLink.AppendFormat(" {0}=Model.{1}, ", propriedade.Name.ToLowerPrimeiraLetra(), propriedade.Name);
                        else
                            paramLink.AppendFormat(" id=Model.{0}  ", propriedade.Name);
                    }
                }

                paramLink = paramLink.Remove(paramLink.Length - 2, 2);
                resultado = templateViewDetails
               .Replace("<%NamespaceEDMX%>", _gerenciadorEdmx.Namespace)
               .Replace("<%EntityName%>", item.Name)
               .Replace("<%paramLink%>", paramLink.ToString());

                paramLink.Length = 0;
                this.CriarArquivo(resultado.ToString(), String.Format(@"{0}\Details.aspx", caminhoViewDetails, item.Name));
                this.QuantidadeViews++;
            }
        }

        public override void GerarViewIndex()
        {
            string resultado = String.Empty;
            string templateViewIndex = this.CarregarTemplate(Templates.ViewIndex);
            StringBuilder stringTH = new StringBuilder();
            StringBuilder stringTD = new StringBuilder();
            StringBuilder paramLink = new StringBuilder();

            foreach (var item in _gerenciadorEdmx.Entidades.Where(x => x.IsSelected))
            {
                this.OnStatus(new StatusEventArgs(TipoStatus.Views) { Mensagem = String.Format(Suporte.Mensagens.GetInstance().ResourceManager.GetString("StatusGerandoView"), "Index", item.Name) });

                var caminhoViewIndex = Path.Combine(_gerenciadorArquivoProjeto.DiretorioProjeto, String.Format(@"Views\{0}", item.Name));
                if (!Directory.Exists(caminhoViewIndex))
                    Directory.CreateDirectory(caminhoViewIndex);

                foreach (var propriedade in item.Properties.OrderByDescending(x => x.IsKey))
                {
                    stringTH.AppendFormat("<th>{0}</th>\r\n\t\t\t", propriedade.Name);
                    stringTD.AppendFormat("<td><%= Html.Encode(item.{0})%></td>\r\n\t\t\t", propriedade.Name);

                    if (propriedade.IsKey)
                    {
                        if (item.Properties.Where(x => x.IsKey).Count() > 1)
                            paramLink.AppendFormat(" {0}=item.{1}, ", propriedade.Name.ToLowerPrimeiraLetra(), propriedade.Name);
                        else
                            paramLink.AppendFormat(" id=item.{0}  ", propriedade.Name);
                    }
                }

                paramLink = paramLink.Remove(paramLink.Length - 2, 2);
                resultado = templateViewIndex
               .Replace("<%NamespaceEDMX%>", _gerenciadorEdmx.Namespace)
               .Replace("<%EntityName%>", item.Name)
               .Replace("<%th%>", stringTH.ToString())
               .Replace("<%td%>", stringTD.ToString())
               .Replace("<%paramLink%>", paramLink.ToString());

                stringTH.Length = 0;
                stringTD.Length = 0;
                paramLink.Length = 0;
                this.CriarArquivo(resultado.ToString(), String.Format(@"{0}\Index.aspx", caminhoViewIndex, item.Name));
                this.QuantidadeViews++;
            }
        }

        public override void GerarViewDelete()
        {
            string resultado = String.Empty;
            string templateViewDelete = this.CarregarTemplate(Templates.ViewDelete);
            StringBuilder stringDIV = new StringBuilder();
            StringBuilder hiddenKeys = new StringBuilder();

            foreach (var item in _gerenciadorEdmx.Entidades.Where(x => x.IsSelected))
            {
                this.OnStatus(new StatusEventArgs(TipoStatus.Views) { Mensagem = String.Format(Suporte.Mensagens.GetInstance().ResourceManager.GetString("StatusGerandoView"), "Delete", item.Name) });

                var caminhoViewDelete = Path.Combine(_gerenciadorArquivoProjeto.DiretorioProjeto, String.Format(@"Views\{0}", item.Name));
                if (!Directory.Exists(caminhoViewDelete))
                    Directory.CreateDirectory(caminhoViewDelete);

                foreach (var propriedade in item.Properties.OrderByDescending(x => x.IsKey))
                {
                    stringDIV.AppendFormat("<div class=\"display-label\">{0}</div>\r\n\t\t\t<div class=\"display-field\"><%= Html.Encode(Model.{0}) %></div>\r\n\t\t\t"
                        , propriedade.Name);

                    if (propriedade.IsKey)
                    {
                        hiddenKeys.AppendFormat("<%=Html.HiddenFor(model => model.{0})%>\r\n\t\t\t", propriedade.Name);
                    }
                }

                resultado = templateViewDelete
               .Replace("<%NamespaceEDMX%>", _gerenciadorEdmx.Namespace)
               .Replace("<%EntityName%>", item.Name)
               .Replace("<%DivProperties%>", stringDIV.ToString())
               .Replace("<%HiddenKeys%>", hiddenKeys.ToString());

                stringDIV.Length = 0;
                hiddenKeys.Length = 0;
                this.CriarArquivo(resultado.ToString(), String.Format(@"{0}\Delete.aspx", caminhoViewDelete, item.Name));
                this.QuantidadeViews++;
            }
        }

        public string CarregarTemplate(Templates template)
        {
            if (!Directory.Exists(Path.Combine(_caminhoTemplate, Path.GetDirectoryName(EnumSuporte.ObterString(template)))))
                RecriarTemplates();

            if (!File.Exists(Path.Combine(_caminhoTemplate, EnumSuporte.ObterString(template))))
                CriarArquivo(ObterArquivoDoResources(template), Path.Combine(_caminhoTemplate, EnumSuporte.ObterString(template)));

            using (var streamReader = new StreamReader(Path.Combine(_caminhoTemplate, EnumSuporte.ObterString(template))))
                return streamReader.ReadToEnd();

        }

        public override void GerarControllers()
        {
            StringBuilder chaves;
            StringBuilder consulta;
            StringBuilder update;
            StringBuilder consultaEdit;
            string templateController = CarregarTemplate(Templates.ControllerCSharp);
            string caminhoController = Path.Combine(_gerenciadorArquivoProjeto.DiretorioProjeto, "controllers");

            if (!Directory.Exists(caminhoController))
                Directory.CreateDirectory(caminhoController);

            for (int i = 0; i < _gerenciadorEdmx.Entidades.Count; i++)
            {
                if (!_gerenciadorEdmx.Entidades[i].IsSelected)
                    continue;

                OnStatus(new StatusEventArgs(TipoStatus.Controllers) { Mensagem = String.Format(Mensagens.GetInstance().ResourceManager.GetString("StatusGerandoController"), _gerenciadorEdmx.Entidades[i].Name) });

                chaves = new StringBuilder();
                consulta = new StringBuilder();
                foreach (var item in _gerenciadorEdmx.Entidades[i].Properties.Where(x => x.IsKey))
                {
                    if (_gerenciadorEdmx.Entidades[i].Properties.Where(x => x.IsKey).Count() > 1)
                    {
                        chaves.AppendFormat("{0} {1}, ", ObterTipo(item.Type), item.Name.ToLowerPrimeiraLetra());
                        consulta.AppendFormat("model.{0} == {1} && ", item.Name, item.Name.ToLowerPrimeiraLetra());
                    }
                    else
                    {
                        chaves.AppendFormat("{0} id, ", ObterTipo(item.Type));
                        consulta.AppendFormat("model.{0} == id && ", item.Name);
                    }
                }

                consultaEdit = new StringBuilder();
                foreach (var item in _gerenciadorEdmx.Entidades[i].Properties.Where(x => x.IsKey))
                {
                    consultaEdit.AppendFormat("model.{0} == entidade.{0} && ", item.Name);
                }


                update = new StringBuilder();
                foreach (var item in _gerenciadorEdmx.Entidades[i].Properties.Where(x => !x.IsKey))
                {
                    update.AppendFormat("entidadeContext.{0} = entidade.{0};", item.Name);
                }

                chaves = chaves.Remove(chaves.Length - 2, 2);
                consulta = consulta.Remove(consulta.Length - 4, 4);
                consultaEdit = consultaEdit.Remove(consultaEdit.Length - 4, 4);

                var host = new MvcScaffoldTextTemplateHost(Path.Combine(_caminhoTemplate, EnumSuporte.ObterString(Templates.ControllerCSharp)))
                               {
                                   Namespace = _gerenciadorArquivoProjeto.Namespace,
                                   EdmxNamespace = _gerenciadorEdmx.Namespace,
                                   ContextName = _gerenciadorEdmx.NomeContext,
                                   VarContext = "context",
                                   Key = chaves.ToString(),
                                   EntityName = _gerenciadorEdmx.Entidades[i].Name,
                                   Update = update.ToString(),
                                   EditQuery = consultaEdit.ToString(),
                                   Query = consulta.ToString()
                               };

                string resultado = _engine.ProcessTemplate(templateController, host);
                if (host.Errors.Count == 0)
                {
                    CriarArquivo(resultado.Trim(), Path.Combine(caminhoController, String.Format("{0}.cs", _gerenciadorEdmx.Entidades[i].Name)));
                    QuantidadeControllers++;
                }
                else
                {
                    throw new MvcScaffoldTextTemplateHostException(String.Format("Erro ao criar controller {0}", _gerenciadorEdmx.Entidades[i].Name), host.Errors);
                }
            }

            OnStatus(new StatusEventArgs(TipoStatus.Controllers) { Mensagem = String.Format(Mensagens.GetInstance().ResourceManager.GetString("SucessoGeracaoController"), QuantidadeControllers), MensagemErro = false });
        }

        //public override void GerarViews()
        //{
        //    GerarViewIndex();
        //    GerarViewDetails();
        //    GerarViewCreate();
        //    GerarViewEdit();
        //    GerarViewDelete();
        //    OnStatus(new StatusEventArgs(TipoStatus.Views) { Mensagem = String.Format(Mensagens.GetInstance().ResourceManager.GetString("SucessoGeracaoView"), QuantidadeViews), MensagemErro = false });
        //}

        public override void AdicionarItensGeradoNoProjeto()
        {
            if (_applicationObject == null || _applicationObject.Solution == null || _applicationObject.Solution.Projects.Count == 0)
            {
                OnStatus(new StatusEventArgs(TipoStatus.Solution) { Mensagem = Suporte.Mensagens.GetInstance().ResourceManager.GetString("ErroCarregarSolution"), MensagemErro = true });
                return;
            }

            for (int i = 1; i <= _applicationObject.Solution.Projects.Count; i++)
            {
                if (_applicationObject.Solution.Projects.Item(i).UniqueName.ToLower()
                    .Contains(_gerenciadorArquivoProjeto.NomeArquivoProjeto.ToLower()))
                {
                    OnStatus(new StatusEventArgs(TipoStatus.Solution) { Mensagem = Suporte.Mensagens.GetInstance().ResourceManager.GetString("ContruindoSolution"), MensagemErro = false });

                    foreach (var item in _listaCaminhoArquivoGerado)
                        _applicationObject.Solution.Projects.Item(i).ProjectItems.AddFromFile(item);

                    OnStatus(new StatusEventArgs(TipoStatus.Solution) { Mensagem = "Build Progress.", MensagemErro = false });
                    _applicationObject.StatusBar.Text = "Build Progress";
                    _applicationObject.Solution.SolutionBuild.Build(true);
                    _applicationObject.StatusBar.Text = "Build succeded";
                    OnStatus(new StatusEventArgs(TipoStatus.Solution) { Mensagem = "Build succeded.", MensagemErro = false });
                    break;
                }
            }
        }
    }
}